final finally finalize 区别
final finally finalize 区别
final (可以修饰 类 方法 变量)
- 修饰类
- 表示不允许继承
- final类中所有的成员方法都会隐式的定义为final方法。
- 表示不允许继承
- 修饰方法
- 表示子类不能重写此方法
- 提高效率
- 锁定方法
- 表示子类不能重写此方法
- 修饰变量
- final成员变量表示常量,只能被赋值一次,赋值后其值不再改变
- 修饰类
finally(跟try…except连用)
- 不关有没有异常都会执行。
- 注意:
- 只有当执行的时候,并且没有发生 线程被kill,断电,退出虚拟机等情况(这些情况不会执行finally),finally才会执行.
- 特殊
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18private int testFinallyString(String str) {
try {
return str.charAt(0) - '0';
} catch (NullPointerException e) {
return 1;
} catch (StringIndexOutOfBoundsException e) {
return 2;
} finally {
return 6;
}
}
// 调用函数
System.out.println(testFinallyString(null) + " " + testFinallyString("0") + " " + testFinallyString(""));
// 结果将会输出 6 6 6
// 原因是因为 finally 特殊,会撤销之前的return.
- 注意:
- 不关有没有异常都会执行。
finalize(在java.lang.Object里定义的)
- 这个方法在gc启动,该对象被回收的时候被调用
- 跟析构函数不一样.
- 注意:
- 这个跟c++ 中的析构函数是不一样的。 c++ 调用delete 时候,对象就会被删除掉。
- java 里面的调用gc,也不一定会及时删除。而是根据下一个删除动作才会删除